A source device can determine that a destination device is unavailable by a lack of response to network data that the source device transmits to the other device. If the destination device is unavailable, the source device may take a different action than continuing to send network data to the destination device. For example, if the source device is sending a Hypertext Transfer Protocol request for a web page to a server and the server does not respond, the source device can display an error to the user or can send the request to a different server. As another example, a source device sends a trade request to a trading server and this trading server is down, the source device can send the trade request to another trading server once the source device determines that the original trading server is not available.
A source device can take different actions to determine if the destination device is unavailable. For example, if the source device is transmitting Transmission Control Protocol (TCP) data to the destination device and does not receive a response within a specific timeout period, the source device increases a TCP retransmission timeout and resends the TCP data. If the destination device does not respond at all, the source device successively and exponentially increases the TCP retransmission timeout until the source device aborts the TCP connection with the destination device.
A problem with relying on a TCP retransmission timeout mechanism (or other timeout-based mechanisms) for determining if a destination device is unavailable is that these mechanisms rely on a timeout for lack of a response. This can delay the source device taking alternate actions if the destination device has failed or is otherwise unavailable.